/**
 * micro_instructions.h
 * 十六进制计算器微指令头文件
 */

#ifndef MICRO_INSTRUCTIONS_H
#define MICRO_INSTRUCTIONS_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>

/**
 * 检查是否为有效的十六进制字符
 * @param c 要检查的字符
 * @return 如果是有效的十六进制字符返回1，否则返回0
 */
int is_valid_hex_char(char c);

/**
 * 验证十六进制字符串格式
 * @param hex_str 要验证的十六进制字符串
 * @return 如果是有效的十六进制字符串返回1，否则返回0
 */
int validate_hex_string(const char *hex_str);

/**
 * 转换字符到十六进制值
 * @param c 要转换的十六进制字符
 * @return 对应的十进制值，无效字符返回-1
 */
int hex_char_to_value(char c);

/**
 * 手动解析十六进制字符串为整数，避免sscanf潜在问题
 * @param hex_str 要解析的十六进制字符串
 * @return 解析后的整数值
 */
int parse_hex_manually(const char *hex_str);

/**
 * 解析十六进制字符串为整数
 * @param hex_str 要解析的十六进制字符串
 * @return 解析后的整数值
 */
int parse_hex(const char *hex_str);

/**
 * 检测算术运算是否会导致溢出
 * @param a 第一个操作数
 * @param b 第二个操作数
 * @param op 运算符
 * @return 如果会导致溢出返回1，否则返回0
 */
int detect_overflow(int a, int b, char op);

/**
 * 执行算术运算
 * @param a 第一个操作数
 * @param b 第二个操作数
 * @param op 运算符
 * @return 计算结果
 */
int calculate(int a, int b, char op);

/**
 * 格式化十六进制输出
 * @param value 要输出的整数值
 */
void print_hex_result(int value);

/**
 * 显示帮助信息
 */
void display_help(void);

/**
 * 清除输入缓冲区
 */
void clear_input_buffer(void);

#endif /* MICRO_INSTRUCTIONS_H */ 